{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "['/mnt/tess/astronet/checkpoints/fa1t_38_run_1/1/AstroCNNModel_final_alpha_1_tuned_20220519_153609',\n",
       " '/mnt/tess/astronet/checkpoints/fa1t_38_run_1/2/AstroCNNModel_final_alpha_1_tuned_20220519_161708',\n",
       " '/mnt/tess/astronet/checkpoints/fa1t_38_run_1/3/AstroCNNModel_final_alpha_1_tuned_20220519_165750',\n",
       " '/mnt/tess/astronet/checkpoints/fa1t_38_run_1/4/AstroCNNModel_final_alpha_1_tuned_20220519_173827',\n",
       " '/mnt/tess/astronet/checkpoints/fa1t_38_run_1/5/AstroCNNModel_final_alpha_1_tuned_20220519_181858',\n",
       " '/mnt/tess/astronet/checkpoints/fa1t_38_run_1/6/AstroCNNModel_final_alpha_1_tuned_20220519_185933',\n",
       " '/mnt/tess/astronet/checkpoints/fa1t_38_run_1/7/AstroCNNModel_final_alpha_1_tuned_20220519_194021',\n",
       " '/mnt/tess/astronet/checkpoints/fa1t_38_run_1/8/AstroCNNModel_final_alpha_1_tuned_20220519_202120',\n",
       " '/mnt/tess/astronet/checkpoints/fa1t_38_run_1/9/AstroCNNModel_final_alpha_1_tuned_20220519_210211',\n",
       " '/mnt/tess/astronet/checkpoints/fa1t_38_run_1/10/AstroCNNModel_final_alpha_1_tuned_20220519_214256']"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import os\n",
    "\n",
    "chkpt_root = '/mnt/tess/astronet/checkpoints/fa1t_38_run_1'\n",
    "data_files = '/mnt/tess/astronet/tfrecords-38-val/*'\n",
    "tces_file = '/mnt/tess/astronet/tces-v14-val.csv'\n",
    "\n",
    "nruns = 10\n",
    "\n",
    "def load_ensemble(chkpt_root, nruns):\n",
    "    checkpts = []\n",
    "    for i in range(nruns):\n",
    "        parent = os.path.join(chkpt_root, str(i + 1))\n",
    "        if not os.path.exists(parent):\n",
    "            break\n",
    "        all_dirs = os.listdir(parent)\n",
    "        if not all_dirs:\n",
    "            break\n",
    "        d, = all_dirs\n",
    "        checkpts.append(os.path.join(parent, d))\n",
    "    return checkpts\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "paths"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Running model 1\n",
      "2491 records\n",
      "Running model 2\n",
      "2491 records\n",
      "Running model 3\n",
      "2491 records\n",
      "Running model 4\n",
      "2491 records\n",
      "Running model 5\n",
      "2491 records\n",
      "Running model 6\n",
      "2491 records\n",
      "Running model 7\n",
      "2491 records\n",
      "Running model 8\n",
      "2491 records\n",
      "Running model 9\n",
      "2491 records\n",
      "Running model 10\n",
      "2491 records\n"
     ]
    }
   ],
   "source": [
    "import getpass\n",
    "import os\n",
    "from astronet import predict\n",
    "import tensorflow as tf\n",
    "\n",
    "\n",
    "def run_predictions(path):\n",
    "    predict.FLAGS = predict.parser.parse_args([\n",
    "      '--model_dir', path,\n",
    "      '--data_files', data_files,\n",
    "      '--output_file', '',\n",
    "    ])\n",
    "\n",
    "    return predict.predict()\n",
    "\n",
    "\n",
    "paths = load_ensemble(chkpt_root, nruns)\n",
    "ensemble_preds = []\n",
    "config = None\n",
    "for i, path in enumerate(paths):\n",
    "    print(f'Running model {i + 1}')\n",
    "    preds, config = run_predictions(path)\n",
    "    ensemble_preds.append(preds.set_index('astro_id'))\n",
    "    print()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "labels = ['disp_e', 'disp_n', 'disp_j', 'disp_s', 'disp_b']\n",
    "\n",
    "col_e = labels.index('disp_e')\n",
    "thresh = 0.215"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "scrolled": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd\n",
    "\n",
    "agg_preds = {}\n",
    "\n",
    "for preds in ensemble_preds:\n",
    "    for ex_id in preds.index:\n",
    "        if ex_id not in agg_preds:\n",
    "            agg_preds[ex_id] = []\n",
    "\n",
    "        row = preds[preds.index == ex_id]\n",
    "        pred_v = row.values[0]\n",
    "        if len(row.values) > 1:\n",
    "            print(f'Warning: duplicate predictions for {ex_id}')\n",
    "        if pred_v[col_e] >= thresh:\n",
    "            agg_preds[ex_id].append('disp_e')\n",
    "        else:\n",
    "            masked_v = [v if i != col_e else 0 for i, v in enumerate(pred_v)]\n",
    "            agg_preds[ex_id].append(preds.columns[np.argmax(masked_v)])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "final_preds = []\n",
    "for ex_id in list(agg_preds.keys()):\n",
    "    counts = {l: 0 for l in labels}\n",
    "    for e in agg_preds[ex_id]:\n",
    "        counts[e] += 1\n",
    "    maxcount = max(counts.values())\n",
    "    counts.update({\n",
    "        'astro_id': ex_id,\n",
    "        'maxcount': maxcount,\n",
    "    })\n",
    "    final_preds.append(counts)\n",
    "    \n",
    "final_preds = pd.DataFrame(final_preds).set_index('astro_id')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "tce_table = pd.read_csv(tces_file, header=0, low_memory=False)\n",
    "tce_table['astro_id'] = tce_table['Astro ID']\n",
    "tce_table = tce_table.set_index('astro_id')\n",
    "for l in labels:\n",
    "    tce_table[l] = tce_table[l[:-1] + l[-1].upper()]\n",
    "tce_labels = tce_table[labels + ['TIC ID']]\n",
    "\n",
    "pl = final_preds.join(tce_labels, on='astro_id', how='left', lsuffix='_p')\n",
    "\n",
    "pl.head()\n",
    "pd.set_option('display.max_columns', None)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Recall: 0.9693486590038314\n",
      "Precision: 0.7981072555205048\n"
     ]
    }
   ],
   "source": [
    "ppos = (pl['disp_e_p'] > 0)\n",
    "pos = (pl['disp_e'] > 0)\n",
    "\n",
    "pneg = (pl['disp_e_p'] == 0)\n",
    "neg = (pl['disp_e'] == 0)\n",
    "\n",
    "print('Recall:', len(pl[ppos & pos]) / len(pl[pos]))\n",
    "print('Precision:', len(pl[ppos & pos]) / len(pl[ppos]))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "369264198\n",
      "418100760\n",
      "334227600\n",
      "276978548\n",
      "118412801\n",
      "158159741\n",
      "404220255\n",
      "141753278\n"
     ]
    }
   ],
   "source": [
    "for i in pl[pos & pneg]['TIC ID']:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "scrolled": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "252588526\n",
      "164528404\n",
      "332870317\n",
      "192591652\n",
      "198555242\n",
      "357302392\n",
      "277848886\n",
      "154214348\n",
      "279064110\n",
      "136651206\n",
      "269291226\n",
      "405687343\n",
      "219824182\n",
      "127846210\n",
      "298647682\n",
      "284266496\n",
      "56861756\n",
      "395164445\n",
      "267924099\n",
      "142751024\n",
      "188258751\n",
      "101496204\n",
      "122577745\n",
      "241855882\n",
      "30318046\n",
      "335588842\n",
      "36492008\n",
      "842068824\n",
      "117170301\n",
      "165500081\n",
      "261814771\n",
      "408945155\n",
      "67685553\n",
      "375927073\n",
      "14209654\n",
      "417208086\n",
      "154271808\n",
      "1400086045\n",
      "159636125\n",
      "230197530\n",
      "320356995\n",
      "407615704\n",
      "167039826\n",
      "201601338\n",
      "270312112\n",
      "30275847\n",
      "466687167\n",
      "404851966\n",
      "113496703\n",
      "309650507\n",
      "276738707\n",
      "373919592\n",
      "446698252\n",
      "40602499\n",
      "319865847\n",
      "62807165\n",
      "277941517\n",
      "311103813\n",
      "300153494\n",
      "406091286\n",
      "325279192\n",
      "38679633\n",
      "281578420\n",
      "118398402\n"
     ]
    }
   ],
   "source": [
    "for i in pl[neg & ppos]['TIC ID']:\n",
    "    print(i)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "      <th>disp_j</th>\n",
       "      <th>disp_s</th>\n",
       "      <th>disp_b</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>astro_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>23532</th>\n",
       "      <td>0.348377</td>\n",
       "      <td>0.019277</td>\n",
       "      <td>0.033789</td>\n",
       "      <td>0.003246</td>\n",
       "      <td>0.767800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23532</th>\n",
       "      <td>0.315538</td>\n",
       "      <td>0.016887</td>\n",
       "      <td>0.051703</td>\n",
       "      <td>0.002216</td>\n",
       "      <td>0.768692</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23532</th>\n",
       "      <td>0.410673</td>\n",
       "      <td>0.020779</td>\n",
       "      <td>0.047859</td>\n",
       "      <td>0.002713</td>\n",
       "      <td>0.641457</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23532</th>\n",
       "      <td>0.320537</td>\n",
       "      <td>0.014956</td>\n",
       "      <td>0.050645</td>\n",
       "      <td>0.002631</td>\n",
       "      <td>0.729361</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23532</th>\n",
       "      <td>0.423733</td>\n",
       "      <td>0.014596</td>\n",
       "      <td>0.029267</td>\n",
       "      <td>0.005336</td>\n",
       "      <td>0.680351</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23532</th>\n",
       "      <td>0.337268</td>\n",
       "      <td>0.018777</td>\n",
       "      <td>0.036372</td>\n",
       "      <td>0.003107</td>\n",
       "      <td>0.780068</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23532</th>\n",
       "      <td>0.279155</td>\n",
       "      <td>0.025742</td>\n",
       "      <td>0.041860</td>\n",
       "      <td>0.006088</td>\n",
       "      <td>0.777589</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23532</th>\n",
       "      <td>0.415583</td>\n",
       "      <td>0.014668</td>\n",
       "      <td>0.028318</td>\n",
       "      <td>0.001435</td>\n",
       "      <td>0.692617</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23532</th>\n",
       "      <td>0.330531</td>\n",
       "      <td>0.017869</td>\n",
       "      <td>0.042272</td>\n",
       "      <td>0.001588</td>\n",
       "      <td>0.757398</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>23532</th>\n",
       "      <td>0.491889</td>\n",
       "      <td>0.012976</td>\n",
       "      <td>0.022419</td>\n",
       "      <td>0.001588</td>\n",
       "      <td>0.665140</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            disp_e    disp_n    disp_j    disp_s    disp_b\n",
       "astro_id                                                  \n",
       "23532     0.348377  0.019277  0.033789  0.003246  0.767800\n",
       "23532     0.315538  0.016887  0.051703  0.002216  0.768692\n",
       "23532     0.410673  0.020779  0.047859  0.002713  0.641457\n",
       "23532     0.320537  0.014956  0.050645  0.002631  0.729361\n",
       "23532     0.423733  0.014596  0.029267  0.005336  0.680351\n",
       "23532     0.337268  0.018777  0.036372  0.003107  0.780068\n",
       "23532     0.279155  0.025742  0.041860  0.006088  0.777589\n",
       "23532     0.415583  0.014668  0.028318  0.001435  0.692617\n",
       "23532     0.330531  0.017869  0.042272  0.001588  0.757398\n",
       "23532     0.491889  0.012976  0.022419  0.001588  0.665140"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "def compare(ensemble_preds, filter):\n",
    "    result = ensemble_preds[0][filter]\n",
    "    for preds in ensemble_preds[1:]:\n",
    "        result = result.append(preds[filter])\n",
    "    return result\n",
    "\n",
    "compare(ensemble_preds, preds.index == pl[pl['TIC ID'] == 28484801].index.values[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>disp_e_p</th>\n",
       "      <th>disp_n_p</th>\n",
       "      <th>disp_j_p</th>\n",
       "      <th>disp_s_p</th>\n",
       "      <th>disp_b_p</th>\n",
       "      <th>maxcount</th>\n",
       "      <th>disp_e</th>\n",
       "      <th>disp_n</th>\n",
       "      <th>disp_j</th>\n",
       "      <th>disp_s</th>\n",
       "      <th>disp_b</th>\n",
       "      <th>TIC ID</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>astro_id</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>26515</th>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>10</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "      <td>5</td>\n",
       "      <td>0</td>\n",
       "      <td>2</td>\n",
       "      <td>1254504863</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          disp_e_p  disp_n_p  disp_j_p  disp_s_p  disp_b_p  maxcount  disp_e  \\\n",
       "astro_id                                                                       \n",
       "26515            0         0        10         0         0        10       0   \n",
       "\n",
       "          disp_n  disp_j  disp_s  disp_b      TIC ID  \n",
       "astro_id                                              \n",
       "26515          0       5       0       2  1254504863  "
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pl[pl.index == pl[pl['TIC ID'] == 1254504863].index.values[0]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### PR curve"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [],
   "source": [
    "ids = set(ensemble_preds[0].index.values)\n",
    "\n",
    "index = {v: i for i, v in enumerate(ids)}\n",
    "\n",
    "pred_es = np.zeros([len(ensemble_preds), len(index)])\n",
    "for i, preds in enumerate(ensemble_preds):\n",
    "    for row in preds.iterrows():\n",
    "        ex_id, pred_e = row[0], row[1][col_e]\n",
    "        pred_es[i][index[ex_id]] = pred_e\n",
    "\n",
    "lbl_es = np.zeros([len(index)], dtype=np.bool)\n",
    "for row in tce_labels.iterrows():\n",
    "    ex_id, lbl_e = row[0], row[1]['disp_e']\n",
    "    lbl_es[index[ex_id]] = (lbl_e > 0)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_cond_pos = int(np.sum(lbl_es))\n",
    "\n",
    "def pr_at_th(th):\n",
    "    pred_pos = np.any(pred_es >= th, axis=0)\n",
    "    true_pos = pred_pos & lbl_es\n",
    "    num_pred_pos = int(np.sum(pred_pos))\n",
    "    num_true_pos = int(np.sum(true_pos))\n",
    "    if num_pred_pos == 0:\n",
    "        return 1.0, 0.0\n",
    "    return float(num_true_pos) / float(num_pred_pos), float(num_true_pos) / float(num_cond_pos)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "AUC: 0.9771762101567387, max R: 1.0, max P: 1.0\n",
      "100% recall at: 41%, threshold: 0.010490284442956188\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 1200x740 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "\n",
    "ps, rs, ths = ([], [], [])\n",
    "th = np.max(pred_es)\n",
    "while th >= 0.0:\n",
    "    p, r = pr_at_th(th)\n",
    "    ps.append(p)\n",
    "    rs.append(r)\n",
    "    ths.append(th)\n",
    "    th -= 0.0005\n",
    "    \n",
    "from sklearn import metrics\n",
    "\n",
    "print(f'AUC: {metrics.auc(rs, ps)}, max R: {max(rs)}, max P: {max(ps)}')\n",
    "    \n",
    "i = len(rs) - 1\n",
    "while rs[i] == 1.0:\n",
    "    i -= 1\n",
    "i += 1\n",
    "print(f'100% recall at: {int(ps[i] * 100)}%, threshold: {ths[i]}')\n",
    "\n",
    "fig, ax = plt.subplots(figsize=(6, 3.7), dpi=200)\n",
    "\n",
    "ax.spines['top'].set_color('#808080')\n",
    "ax.spines['right'].set_color('#808080')\n",
    "ax.spines['left'].set_color('#808080')\n",
    "ax.spines['bottom'].set_color('#808080')\n",
    "ax.tick_params(direction='in', color='#808080')\n",
    "\n",
    "plt.grid(color='#c0c0c0', linestyle='--', linewidth=0.5)\n",
    "\n",
    "plt.ylabel('Precision', fontweight='bold')\n",
    "plt.xlabel('Recall', fontweight='bold')\n",
    "\n",
    "plt.xlim((0.0, 1.0))\n",
    "plt.ylim((0.0, 1.0))\n",
    "\n",
    "_ = plt.plot(rs, ps)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "74.9% precision at: 97%, threshold: 0.1384902844429563\n"
     ]
    }
   ],
   "source": [
    "i = 0\n",
    "while ps[i] > 0.749:\n",
    "    i += 1\n",
    "print(f'74.9% precision at: {int(rs[i] * 100)}%, threshold: {ths[i]}')"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
